Jednoduché hry

python.edumach.cz

Tester pozornosti

Vytvořme hru (program), která nám bude v pravidelných intervalech náhodně vykreslovat zelený čtverec, do kterého by měl hráč klikat. Musí to udělat, dokud čtverec nezmění místo. Pokud se trefí do čtverce, získá 1 bod, pokud pole netrefí, naopak o jeden bod přijde. V horní části obrazovky hráč vidí počet získaných bodů.

Řešení programu:

#############################
#  17_tester_pozornosti.py  #
#############################

import tkinter
import random

canvas = tkinter.Canvas()
canvas.pack()

def timer1():
	canvas.delete('all')
	global sx, sy
	sx = random.randrange(300)
	sy = random.randint(20, 250)
	canvas.create_rectangle(sx, sy, sx+velikost,  sy+velikost, fill='green')
	canvas.create_text(100, 10, text='Počet získaných bodů:')
	canvas.create_text(200, 10, text=pocet_bodu)
	canvas.after(500, timer1)

def klik(souradnice):
	global pocet_bodu
	x = souradnice.x
	y = souradnice.y
	if sx < x  < sx+velikost and sy < y < sy+velikost:
		pocet_bodu = pocet_bodu + 1
	else:
		pocet_bodu = pocet_bodu - 1

pocet_bodu = 0
sx = 0
sy = 0
velikost = 50
timer1()
canvas.bind('<Button-1>', klik)

canvas.mainloop()

💾 Úkoly

  1. Upravte program tak, aby se zastavil, pokud jsme získali více než 10 bodů, a pogratuluje nám.

  2. Upravte program tak, aby se zastavil, pokud jsme získali méně než -10 bodů, a napsal, že je to s našimi reakcemi trochu horší.

  3. Upravte program tak, aby někdy kreslil červený čtvereček, do kterého nesmíme kliknout. Pokud se trefíme do červeného čtverečku, program odečte 2 body. Zastaví se tento upravený program na -10 bodech (pokud bychom řešili i úlohu 2)?

  4. Upravte program tak, aby se obtížnost měnila podle stavu bodů – například za určitý počet získaných bodů se častěji posouvá čtverec, nebo se kreslí menší, nebo se častěji kreslí červený čtverec.

Chytání kuličky

Vytvořme hru (program), ve které bude shora obrazovky padat červená kulička. Ve spodní části obrazovky bude modrý kurzor – vodorovná čára. Pohybem myši pohybujeme modrým kurzorem doleva nebo doprava. Cílem hry je chytit padající míč pomocí kurzoru. Za chycení míče získáváme 1 bod. Když míč chytíme nebo nechytíme, začne míč opět padat shora, ale na náhodném místě. Stav našeho bodu je uveden v horní části obrazovky.

Řešení programu:

###########################
#  17_chytani_kulicky.py  #
###########################

import tkinter
import random

canvas = tkinter.Canvas(width=500, height=400)
canvas.pack()

def kresli_micek(x, y):
    canvas.create_oval(x-5, y-5, x+5, y+5, fill='red')

def kresli_kurzor(x, y):
    canvas.create_line(x, y, x+50, y, fill='blue', width=5)

def vypis_body(pocet_bodu):
    canvas.create_text(100, 10, text='Počet získaných bodů:')
    canvas.create_text(200, 10, text=pocet_bodu)

def timer1():
    canvas.delete('all')
    global micek_x, micek_y, pocet_bodu
    micek_y = micek_y + 5
    kresli_micek(micek_x, micek_y)
    kresli_kurzor(kurzor_x, kurzor_y)
    vypis_body(pocet_bodu)
    if kurzor_x < micek_x < kurzor_x + 50 and kurzor_y - 10 < micek_y < kurzor_y:
        pocet_bodu = pocet_bodu + 1
        micek_x = random.randrange(300)
        micek_y = 20
    if micek_y > 300:
        micek_x = random.randrange(300)
        micek_y = 20
    canvas.after(10, timer1)

def posun_mysi(souradnice):
    global kurzor_x
    kurzor_x = souradnice.x
    canvas.delete('all')
    kresli_micek(micek_x, micek_y)
    kresli_kurzor(kurzor_x, kurzor_y)
    vypis_body(pocet_bodu)

pocet_bodu = 0
micek_x = random.randrange(300)
micek_y = 20
kurzor_x = 150
kurzor_y = 250

timer1()
canvas.bind('<Motion>', posun_mysi)

canvas.mainloop()```

💾 Úkoly

  1. Upravte program tak, aby nám odečítal body, pokud míč nechytíme.

  2. Upravte program tak, aby se obtížnost měnila podle získaných bodů: například rychlost pádu míče nebo šířka kurzoru.

  3. Upravte program tak, aby nám blahopřál k úspěchu s určitým počtem získaných bodů. Případně může nakreslit veselého smajlíka.

  4. Upravte program tak, aby se při nízkých nebo záporných bodech zastavil a řekl nám, že máme určité rezervy. Případně může nakreslit smutného smajlíka.

  5. Upravte program tak, abychom k pohybu kurzoru a míče používali příkaz canvas.move.

Hledej procento

Vytvořte program pro hledání procenta. Nejprve se na ploše nakreslí velký červený znak %. Program ho na 100 milisekund zobrazí a ihned poté se překreslí hnědým laťkovým plotem, který procento zakryje. Může se stát, že někdy kousek procenta prosvítá skrz laťky. Úkolem hráče je kliknout na laťku, za kterým se procento skrývá. Program poradí hráči, zda má kliknout více doprava nebo doleva. Když hráč klikne poblíž skrytého procenta, program mu řekne, že vyhrál.

Řešení programu:

###########################
#  17_hledej_procento.py  #
###########################

import tkinter
import random

canvas = tkinter.Canvas(width=800, height=500)
canvas.pack()

def nakresli_procento(x, y):
    canvas.create_text(x, y, text='%', font='Arial 20', fill='red')

def nakresli_plot():
    canvas.create_rectangle(0, 40, 500, 60, fill='brown')
    canvas.create_rectangle(0, 240, 500, 260, fill='brown')
    x = 0
    for i in range(0, 20):
        canvas.create_rectangle(x, 30, x+28, 300, fill='brown')
        x = x + 30

def klik(souradnice):
    x = souradnice.x
    y = souradnice.y
    canvas.delete('all')
    nakresli_procento(procento_x, procento_y)
    nakresli_plot()
    if procento_x - 10 < x < procento_x + 10:
        canvas.create_text(200, 10, text='Výborně, získal si procento')
    if x < procento_x - 10:
        canvas.create_text(200, 10, text='Jdi více vpravo')
    if procento_x + 10 < x:
        canvas.create_text(200, 10, text='Jdi více vlevo')

procento_x = random.randrange(500)
procento_y = random.randint(40, 280)
nakresli_procento(procento_x, procento_y)
canvas.update()
canvas.after(100)
nakresli_plot()

canvas.bind('<Button-1>', klik)

canvas.mainloop()

💾 Úkoly

  1. Přidejte do programu tlačítko, které zapne novou hru. Znovu vylosuje místo, kde se vykreslí procento a vše je připraveno ke spuštění hry.

  2. Upravte program tak, aby počítal počet pokusů o uhodnutí a průběžně je uváděl v horní části obrazovky.

  3. Upravte program tak, aby nám po vyčerpání určitého počtu pokusů napsal nějakou smutnou zprávu a nedovolil nám dále hádat.